package 加密与安全;

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.Security;//不能导入下面模块
//import com.mysql.cj.protocol.Security; 不能导入该模块

import org.bouncycastle.jce.provider.BouncyCastleProvider;

/*
我们必须把BouncyCastle提供的jar包放到classpath中。这个jar包就是bcprov-jdk18on-xxx.jar，可以从官方网站下载。

pom.xml中增加内容：
	<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk18on 
	BouncyCastle就是一个提供了很多哈希算法和加密算法的第三方库。它提供了Java标准库没有的一些算法，例如，RipeMD160哈希算法。-->
	<dependency>
    	<groupId>org.bouncycastle</groupId>
    	<artifactId>bcprov-jdk18on</artifactId>
    	<version>1.73</version>
	</dependency>

Java标准库的java.security包提供了一种标准机制，允许第三方提供商无缝接入。我们要使用BouncyCastle提供的RipeMD160算
法，需要先把BouncyCastle注册一下：
在使用BouncyCastle前，首先需要将BouncyCastle加入到Security的提供者中：
*/
public class 使用BouncyCastle算法 {
	public static void main(String[] args) throws Exception {
      // 注册BouncyCastle:
		Security.addProvider(new BouncyCastleProvider());
      // 按名称正常调用:
      MessageDigest md = MessageDigest.getInstance("RipeMD160");
      md.update("HelloWorld".getBytes("UTF-8"));
      byte[] result = md.digest();
      System.out.println(new BigInteger(1, result).toString(16));
  }
}
/*
其中，注册BouncyCastle是通过下面的语句实现的：
Security.addProvider(new BouncyCastleProvider());
注册只需要在启动时进行一次，后续就可以使用BouncyCastle提供的所有哈希算法和加密算法。s
*/